// PROGRAMA : IDCPC007 OPCAO: 'CEP'
// BIBLIOTECA : SISP
// SISTEMA : Informacoes de Seguranca Publica - SISP
// CLIENTE : SEJUSP - Sec. da Justica e Seguranca Publica
// Instituto de Identificacao
// PROGRAMADOR : Carlos Henrique DATA: 10/11/1998
// OBJETIVO : CONSULTAR ESTATISTICAS DE EMISSAO DE CARTEIRAS DE
// IDENTIDADE POR POSTO EM UM INTERVALO DE DATAS.
// ALTERACAO : EM 16/06/1999 POR SOLON MIRANDA
// : EM 14/03/2000 ACERTO DO CAMPO DE DATA (N8) (INTERVALO)
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.util.Arrays;

import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Idcpc007Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idcpc007A;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idcpc007B;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idctc008;
import br.com.vti.sisp_sicrim.antigo.model.Idclc001;
import br.com.vti.sisp_sicrim.antigo.model.SicControle;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.model.Sisldat8;
import br.com.vti.sisp_sicrim.antigo.model.Sisll001;
import br.com.vti.sisp_sicrim.antigo.model.Tablele;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Idcpc007 OBJETIVO : CONSULTAR ESTATISTICAS DE EMISSAO DE CARTEIRAS DE IDENTIDADE POR POSTO EM UM INTERVALO DE DATAS. ALTERACAO : EM 16/06/1999 POR SOLON MIRANDA *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/idcpc007")
public class Idcpc007 {
	// Views utilizadas
	SicControle vwDvecon = new SicControle();
	SicTabelas vwTabele = new SicTabelas();
	// Telas/relatorios utilizados
	Idcpc007A idcpc007A;
	Idcpc007B idcpc007B;
	Idctc008 idctc008;
	Idcpc007Report report;
	// Includes utilizados
	Idclc001 idclc001 = new Idclc001();
	Sisldat8 sisldat8 = new Sisldat8();
	Sisll001 sisll001 = new Sisll001();
	Tablele tablele = new Tablele();
	// Areas globais / session
	Sisgsisp sisgsisp;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();
	
	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Idcpc007 idcpc007Anterior;
	String faseproc = "0";

	private int jDataPesqI = 0;
	private int jPostoPesqI = 0;
	private int jPostoPesqF = 0;
	private int jTipoPesqF = 0;
	private int jDataPesqF = 0;

	private int jUsuario = 0;
	private int jCodPosto = 0;
	private String[] jSaida = new String[3];
	private String jImpressora = "";
	private int jDataI = 0;
	private int jDataF = 0;
	private int jPosto = 0;
	private String jDescrPosto = "";
	private String jDescrTot = "";
	private int[] jEmissao = new int[13];
	private int[][] jViasDia = new int[13][5];
	private int[] jViasPosto = new int[5];
	private int jDataAux = 0;
	private int[] jViasPostoAux = new int[5];
	private int jI = 0;
	private int jJ = 0;
	private int jCont = 99;

	private Idctc008 preMapas() {
		idcpc007A = new Idcpc007A(true, sessao);
		idcpc007B = new Idcpc007B(true, sessao);
		idctc008 = new Idctc008(true, sessao);
		Arrays.fill(jSaida, "");
		Arrays.fill(jEmissao, 0);
		Arrays.fill(jViasDia, 0);
		Arrays.fill(jViasPosto, 0);
		Arrays.fill(jViasPostoAux, 0);
		return idctc008;
	}

	public Idcpc007(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Get
	public void executar(Idcpc007A idcpc007A, Idcpc007B idcpc007B, Idctc008 idctc008) {
		try {
			main(idcpc007A, idcpc007B, idctc008);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Idcpc007A pidcpc007A, Idcpc007B pidcpc007B, Idctc008 pidctc008) throws Exception {
		if (pidcpc007A == null && pidcpc007B == null && pidctc008 == null) {
			primeiraVez = true;
			// idctc008 = new Idctc008 (primeiraVez);
			idctc008 = preMapas();
			idctc008.setNavegar("../idcpc007/executar");
			result.include("idctc008", idctc008);
			sessao.setAtributo("IDCPC007", this);
			idctc008.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			restaurarEstados(pidcpc007A, pidcpc007B, pidctc008);
		}

		report = new Idcpc007Report();
		report.setPageSize(62);
		report.setLineSize(80);

		entraDados();
		if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
			return;
		}

		jTipoPesqF = 88;
		// jTipoPesqI = 88;
		// DATA-PESQ-I := DATINI - 19000000 - AS DATAS ESTAO GRAVADAS COM
		jDataPesqI = sisldat8.datini - 19000000;
		// DATA-PESQ-F := DATFIM - 19000000 - SEIS DIGITOS APENAS.
		jDataPesqF = sisldat8.datfim - 19000000;
		for (int i1 = 1; i1 <= 4; i1++) {
			jViasPosto[i1] = 0;
		}
		for (int i1 = 1; i1 <= 4; i1++) {
			jViasPostoAux[i1] = 0;
		}
		if (idcpc007B.getJcodposto() == 999) {
			while (vwTabele.pesquisaCodigoTabelaClas(207)) {

				idctc008.setJposto(vwTabele.getCodigoElem().intValue());
				jPostoPesqI = vwTabele.getCodigoElem().intValue();
				jPostoPesqF = vwTabele.getCodigoElem().intValue();
				jPosto = vwTabele.getCodigoElem().intValue();
				// UtilBean.subStr(dincntDatemi, 0, 4) =
				// vwTabele.getCodigoElem();
				idctc008.setJdescrposto(vwTabele.getDescricaoElem());
				if (!idcpc007B.getJsaida(1).trim().equals("")) {
					saidaTela();
				} else {
					saidaImpressa();
				}
				if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
					break;
				}

			}
		} else {

			report.setJposto(idcpc007B.getJcodposto());
			report.setJposto(idcpc007B.getJcodposto());
			if (!idcpc007B.getJsaida(1).trim().equals("")) {
				saidaTela();
			} else {
				saidaImpressa();
			}
		}
		// DEFINE PRINTER(EFM = 1)
		// RELATORIO 1 PS=62 LS=80 SG=ON
		report.imprimir();
		// RELATORIO
		// OUTPUT 'P69E'
		sessao.setAtributo("IDCPC007", this);
		result.include("idctc008", idctc008);
		idctc008.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
	}

	private void saidaTela() throws Exception {
		jI = 1;
		for (int i1 = 1; i1 <= 12; i1++) {
			for (int i2 = 1; i2 <= 4; i1++) {
				jViasDia[i1][i2] = 0;
			}
		}
		for (int i1 = 1; i1 <= 4; i1++) {
			jViasPosto[i1] = 0;
			jViasPostoAux[i1] = 0;
		}
		for (int i1 = 1; i1 <= 12; i1++) {
			jEmissao[i1] = 0;
		}
		jDataAux = 0;
		jDescrTot = "";
		while (vwDvecon.pesquisaMutidt(jPostoPesqF, jTipoPesqF, jDataPesqI, jDataPesqF)) {
			if (vwDvecon.getCodigoRecuperacao() < 1 || vwDvecon.getCodigoRecuperacao() > 3) {
				continue;
			}
			if (jDataAux != vwDvecon.getDataEmissao()) {
				if (jDataAux != 0) {
					quebraData();
					jI += 1;
				}

				jDataAux = vwDvecon.getDataEmissao();
			}
			if (jI == 13) {

				idctc008.receberTela(false, result);
				if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
					return;
				}
				for (int i1 = 1; i1 <= 12; i1++) {
					for (int i2 = 1; i2 <= 4; i1++) {
						jViasDia[i1][i2] = 0;
					}
				}
				for (int i1 = 1; i1 <= 12; i1++) {
					jEmissao[i1] = 0;
				}
				jI = 1;
			}
			jJ = vwDvecon.getCodigoRecuperacao();
			idctc008.setJviasdia(jI, jJ, idctc008.getJviasdia(jI, jJ) + 1);

		}
		if (vwDvecon.registrosProcessados() != 0) {
			quebraData();
			report.setJviasposto(jViasPostoAux);
			report.setJdescrtot("TOTAL DO POSTO:");

			idctc008.receberTela(false, result);
		}
		if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
			return;
		}
	}

	private void quebraData() throws Exception {
		int ind;
		idctc008.setJemissao(jI, jDataAux);
		jEmissao[jI] = (int) funcoes.sissd002(jEmissao[jI]);
		// EMISSAO(#I) := #EMISSAO(#I) + 19000000 - A DATA ESTA ARMAZENADA
		for (ind = 1; ind <= 3; ind++) {
			idctc008.setJviasdia(jI, 4, idctc008.getJviasdia(jI, 4) + idctc008.getJviasdia(jI, ind));
		}
		// com seis digitos.
		for (jJ = 1; jJ <= 4; jJ++) {

			jViasPostoAux[jJ] = jViasPostoAux[jJ] + idctc008.getJviasdia(jI, jJ);
		}
	}

	private void saidaImpressa() throws Exception {
		for (int i2 = 1; i2 <= 4; i2++) {
			jViasDia[1][i2] = 0;
		}
		jEmissao[1] = 0;
		jDataAux = 0;
		for (int i1 = 1; i1 <= 4; i1++) {
			jViasPosto[i1] = 0;
		}

		report.setJdescrtot("TOTAL DO POSTO:");

		while (vwDvecon.pesquisaMutidt(jPostoPesqF, jTipoPesqF, jDataPesqI, jDataPesqF)) {
			if (vwDvecon.getCodigoRecuperacao() < 1 || vwDvecon.getCodigoRecuperacao() > 3) {
				continue;
			}
			if (jDataAux != vwDvecon.getDataEmissao()) {
				if (jDataAux != 0) {
					imprimeData();
				}

				jDataAux = vwDvecon.getDataEmissao();
			}
			jJ = vwDvecon.getCodigoRecuperacao();
			idctc008.setJviasdia(1, jJ, idctc008.getJviasdia(1, jJ) + 1);
			jCont += 1;
			if (jCont == 100) {

				// idcpc007C.enviarReceberTela(false, result);
				jCont = 0;
			}
			if (vwDvecon.fimDados()) {
				imprimeData();
				report.gravaRelatorio(2);
				// RELATORIO
			}
		}
		while (report.getPageLine() != 1)
			report.saltaLinhas(1);
	}

	private void imprimeData() throws Exception {
		int ind;
		report.setJemissao(1, jDataAux);
		report.setHoraCorrente(idcpc007B.getHoraCorrente());
		report.setSdatx(idcpc007B.getSdatx());

		jEmissao[1] = (int) funcoes.sissd002(jEmissao[1]);
		// EMISSAO(1) := #EMISSAO(1) + 19000000 - A DATA ESTA ARMAZENADA
		for (ind = 1; ind <= 3; ind++) {
			report.setJviasdia(1, 4, idctc008.getJviasdia(1, 4) + idctc008.getJviasdia(1, ind));
		}
		// com seis digitos.
		for (jJ = 1; jJ <= 4; jJ++) {

			report.setJviasposto(jJ, report.getJviasposto(jJ) + idctc008.getJviasdia(1, jJ));
		}
		report.gravaRelatorio(3);
		// UtilBean.mensagemTexto ();
		// RELATORIO
		for (int i2 = 1; i2 <= 4; i2++) {
			jViasDia[1][i2] = 0;
		}
		jEmissao[1] = 0;
	}

	private void entraDados() throws Exception {

		if (!idcpc007B.getEnviada()) {
			idcpc007B.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
			sessao.setAtributo("IDCPC007", this);
			result.include("idctc008", idctc008);
			return;
		} else {
			idcpc007B.receberTela(false, result);
		}
		if (!UtilBean.funcao.equals(UtilBean.ctt_processa)) {
			idctc008.enviarMensagem(null, "");
			return;
		}
		if (!sessao.getSisgsisp().getOperacao().equals("CEP")) {
			funcoes.sissm001(result, sessao);
		}
		// Chama programa de acordo com a operacao
		funcoes.tabsemi(sessao);
		if (idcpc007B.getJcodposto() != 999) {
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 0, 3, "N", 207);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 3, 12, "N", idcpc007B.getJcodposto());
			tablele.resp = funcoes.sisst001(207, idcpc007B.getJcodposto(), tablele.resp);
			if (UtilBean.subStr(tablele.resp, 0, 1).equals("#"))
			// Pesquisa o Posto informado
			{
				idctc008.enviarMensagem("jViasPosto", "");
				return;
			} else {

				idctc008.setJdescrposto(tablele.resp);
			}
		}

		if (UtilBean.validarMascara(idcpc007B.getDatini(), "yyyyMMdd")) {
			idctc008.enviarMensagem("jViasPosto", "");
			return;
		}
		if (UtilBean.validarMascara(idcpc007B.getDatfim(), "yyyyMMdd")) {
			idctc008.enviarMensagem("jEmissao", "");
			return;
		}
		if (idcpc007B.getDatini() > idcpc007B.getDatfim()) {
			idctc008.enviarMensagem("jEmissao", "");
			return;
		}
		sisldat8.dtini = idcpc007B.getDatini();
		sisldat8.dtini = (int) funcoes.sissd002(sisldat8.dtini);
		sisldat8.dtfim = sisldat8.datfim;
		// Inverte Data
		sisldat8.dtfim = (int) funcoes.sissd002(sisldat8.dtfim);
		if (UtilBean.validaSelecao(idcpc007B.getJsaida())) {
			idctc008.enviarMensagem("jViasDia", "");
			return;
		}

		report.setJdatai(sisldat8.dtini);
		idctc008.setJdataf(sisldat8.dtfim);
	} // SISCERRO}}} //UtilBean.mensagemTexto("!  ERROR NUMERO:" *ERROR-NR
		// "    LINHA:" *ERROR-LINE " PROGRAMA:" *PROGRAM "!"); //
		// report.gravaRelatorio( 1);

	// RELATORIO
	private void restaurarEstados(Idcpc007A pidcpc007A, Idcpc007B pidcpc007B, Idctc008 pidctc008) {
		this.idcpc007Anterior = (Idcpc007) sessao.getAtributo("IDCPC007");
		if (pidcpc007A != null) {
			idcpc007A = pidcpc007A;
		} else {
			idcpc007A = this.idcpc007Anterior.idcpc007A;
		}
		idcpc007A.setSessao(sessao);
		if (pidcpc007B != null) {
			idcpc007B = pidcpc007B;
		} else {
			idcpc007B = this.idcpc007Anterior.idcpc007B;
		}
		idcpc007B.setSessao(sessao);
		if (pidctc008 != null) {
			idctc008 = pidctc008;
		} else {
			idctc008 = this.idcpc007Anterior.idctc008;
		}
		idctc008.setSessao(sessao);
		this.faseproc = this.idcpc007Anterior.faseproc;
	}
}
